package org.su.generalmvc.core;



import org.su.generalmvc.IModel;
import org.su.generalmvc.jdbc.IDao;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


/**
 * action调用类。所有的action调用都有该类执行。
 * @author yangchuan
 * @since 2012-03-6
 * @version 1.0
 */
public interface ActionInvocation {
	
    Object invoke() throws Exception;

    /**
     * Invokes only the Action (not Interceptors or Results).
     * <p/>
     * This is useful in rare situations where advanced usage with the interceptor/action/result workflow is
     * being manipulated for certain functionality.
     *
     * @return the return code.
     * @throws Exception can be thrown.
     */
    Object invokeActionOnly() throws Exception;

    public ServletResponse getResponse();
    
    public ServletRequest getRequest();

    /**
     * 初始化action调用
     * @param proxy action代理，即有RequstMethod标注的方法对象
     */
    void init(ActionProxy proxy) ;
    
    /**
     * 获取当天调用的action的参数值集合
     * @return 返回一个封装好的参数值集合
     */
	public Object[] getArgs();

	/**
	 * 设置action的参数值列表
	 * @param args 传入当天调用的action的参数值集合
	 */
	public void setArgs(Object[] args);
	
	/**
	 * 获取action代理对象
	 * @return  得到当前action代理
	 */
	public ActionProxy getProxy();
	
	/**
	 * 返回的数据模型
	 * @return action处理结果的数据模型对象
	 */
	public IModel getModel();
	
	/**
	 * 返回的DAO
	 * @return 返回当前DAO对象
	 */
	public IDao getDao();

	/**
	 * 获取当前用户session对象
	 * @return 返回一个IUserSession对象
	 *//*
	Object getUserSession();*/
	
}
